const { IncomingForm } = require('formidable')

const { join, basename } = require('path')

module.exports = {
  /**
   * 上传图片
   * @param {Request} req 请求对象
   * @returns {Promise<{ fields, files }>} 如果上传失败，返回Promise<null>
   */
  uploadFile(req) {
    return new Promise((resolve, reject) => {
      const form = new IncomingForm()
      // 设置上传文件目录
      form.uploadDir = join(__dirname, '../public/uploads')
      // 是否保存文件扩展名，默认false
      form.keepExtensions = true
      // 是否允许上传多个文件，默认false
      form.multiples = true
      // 单个文件最大：20MB，默认：200MB
      form.maxFileSize = 20 * 1024 * 1024
      // 解析表单数据
      form.parse(req, (err, fields, files) => {
        if (err) {
          return reject(err)
        }
        // 循环files
        for (const [k, v] of Object.entries(files)) {
          // 为了保证上传一个和上传多个文件时的数据格式统一，如果不是数组，则转换成数组
          if (!Array.isArray(v)) {
            files[k] = [v]
          }
          files[k] = files[k].map(v => {
            return basename(v.path)
          })
        }
        resolve({ fields, files })
      })
    }).catch(err => null)
  }
}
